Possible answer with a space complexity of O(2N)=O(N):
1) Create 2 stacks, one will hold the values and the other will hold the minimum values.
2) On each push, compare the element with the current min-stack top, push to min-stack if smaller.
3) Pop is always done from both stacks simultaneously
3) Getting the min. value can now be done in O(1) time, just return the min-stack top
אוקטובר 2021
יש כאן בעיה בתשובה שלך. מה קורה אם נניח אני מכניס קודם 1 ואז 2 ואז 3? אז במחסנית המינימום יהיה 1. לאחר מכן נניח אנחנו רוצים לבצע POP לפי מה שרשמת כאן אז מה שיקרה זה שאנחנו נעיף גם את 1 ממחסנית המינימום וגם את 3 מהמחסנית הרגילה וכך יוווצר מצב שבפועל לא הסרנו מהמחסנית הרגילה את 1 אבל הדיווח עליו כמינימום נעלם ממחסנית המינימום.
דצמבר 2023
הPOP במקרה הזה לא יהיה (1)O. זה גם לא נדרש. מה שנרש הוא שהוצאת איבר המינימום יהיה ב(1)O. במקרה ועושים POP, נוציא את האיבר הראשון מהמערך הרגיל, ואת המחסנית שמחזיקה את ערכי המינימום נשפוך לתוך מחסנית עזר עד שנמצא את האיבר שעכשיו הוצאנו מהמחסנית הרגילה(3), נוציא אותו ונחזיר את שאר האיברים מהמחסנית עזר. במקרה הגרוע זה יהיה (N)O